package chapter17;

import com.sun.org.apache.bcel.internal.generic.NEW;

/**
 * @author yt1105
 * @version 1.0
 * 我们使用多线程 模拟多个窗口进行售票处理 这一点很重要()同时售票（一共售票100张 很重要这一点）
 */
public class SellTicket {
    public static void main(String[] args) {
//        SellTicket01 sellTicket01 = new SellTicket01();
//        SellTicket01 sellTicket02 = new SellTicket01();
//        SellTicket01 sellTicket03 = new SellTicket01();
//        sellTicket01.start();
//        sellTicket02.start();
//        sellTicket03.start();
        //我们使用实现接口的方式来售票处理 这样的话 就会出现超买现象的 你只要是多个同时进行的话，那么就一定会导致我们的数据发生冲突
        //为什么那 是因为同时存在多个线程的时候，我们就会导致我们的判断不准确就会
        SellTicket02 sellTicket02 = new SellTicket02();
        new Thread(sellTicket02).start();
        new Thread(sellTicket02).start();
        new Thread(sellTicket02).start();
    }
}

//Thread 方式
class SellTicket01 extends Thread {
    private static int ticketNum = 100;//让多个线程共享 我们的num

    @Override
    public void run() {
        while (true) {
            if (ticketNum <= 0) {
                System.out.println("票已售空 。。。。。");
                break;
            } else {
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("窗口" + Thread.currentThread().getName() + "售出一张票" + "还剩" + (--ticketNum) + "票");
            }
        }

    }
}

class SellTicket02 implements Runnable {
    private static int ticketNum = 100;//让多个线程共享 我们的num

    @Override
    public void run() {
        while (true) {
            if (ticketNum <= 0) {
                System.out.println("票已售空 。。。。。");
                break;
            } else {
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("窗口" + Thread.currentThread().getName() + "售出一张票" + "还剩" + (--ticketNum) + "票");
            }
        }
    }
}